package com.huilian.iotbox.data.dao;

import com.huilian.iotbox.data.dto.UserDto;
import com.huilian.iotbox.data.po.Permission;
import com.huilian.iotbox.data.po.User;
import com.huilian.iotbox.data.vo.UserInfo;
import com.huilian.iotbox.data.vo.UserVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

/**
 * @author 少凡
 * @date 2020/2/23 10:49
 */
@Mapper
public interface UserCommonDao {
    List<Permission> findUserPermission(@Param("userId") Object userId);

    User findUserByLoginUserName(@Param("username") String username, @Param("status") Integer status);

    UserInfo getUserInfo(@Param("userId") String userId);

    List<Integer> getAgencyIdList(String userId);

    List<User> getListByAgencyId(UserInfo userInfo);

    Integer insert(User user);

    Integer delete(@Param("userId") Integer userId);

    Integer update(User user);

    Integer checkUserName(@Param("username") String username, @Param("status") Integer status);

    List<UserVo> findStaffListByAgencyId(UserVo userVo);

    Integer checkMobile(@Param("mobile") String mobile, @Param("status") Integer status);

    Integer checkUserName(User user);

    Integer checkIdCardNo(String idCardNo, String agencyId, UserInfo userInfo);

    User findUserById(Integer id);

    List<UserVo> findByNameAndMobile(UserDto userDto);

    List<User> getAllUserOfName(@Param("userInfo") UserInfo userInfo, @Param("agencyId") String agencyId);

    List<UserVo> findUserList(UserDto userDto);

    Integer updateBalance(User user);

    Integer updatePwd(User userPwd);

    BigDecimal findUserBalance(Integer id);

    UserVo findUser(Integer userId);

    /**
     * 统计新增运营商数量
     */
    Integer findNewOperatorsCount(@Param("agencyId") Integer agencyId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 根据Set集合统计没消费的运营商
     *
     * @param set
     * @return
     */
    Integer findSetUserNoTrade(@Param("agencyId") Integer agencyId, @Param("set") Set<Integer> set);

    UserVo findOperatePasswordByOutTradeNoByUserId(@Param("outTradeNo") String outTradeNo, @Param("userId") Integer userId);

    UserVo findOperatePasswordByOutTradeNoByParentIdOrUserid(@Param("outTradeNo") String outTradeNo, @Param("userId") Integer userId);

    UserVo findOperatePasswordByOutTradeNoByUserIdAndOuTradeNo(@Param("outTradeNo") String outTradeNo, @Param("userId") Integer userId);

    UserVo getUserId(Integer userId);

    User getByUsername(@Param("user") User user, @Param("status") Integer status);

    User findSubUserId(UserDto userDto);

    List<User> findAllUserByParentId(Integer userId);

    int updateWelfareReturnCoinSum(UserDto userDto);

    void updateInfo(User user);

    Integer updateMobile(User user);

    Integer updateOfficialAccountOpenId(@Param("userId") Integer userId, @Param("officialAccountOpenId") String officialAccountOpenId, @Param("officialAccountId") Integer officialAccountId);

    Integer updateMobileAndPassword(User user);

    Integer updateWeXinAccount(User user);

    User findByMobile(UserDto userDto);

    User findById(Integer id);

    Integer updateOpenId(UserDto userDto);

    void changeSignStatus(UserDto userDto);

    UserVo findOperatePasswordByUserId(Integer id);

    /**
     * 根据unionId获取运营商信息
     *
     * @param unionId
     * @param status
     * @return
     */
    User getUserByUnionId(@Param("unionId") String unionId, @Param("status") Integer status);

    List<User> findUserByIdAndOther(User user);

    /**
     * 前端判断有没有绑定手机号或者微信账号
     * @param id
     * @return
     */
    User getMobileAndUnionId(Integer id);

    /**
     * 获取操作密码
     * @param id
     * @return
     */
    User findOperatePassword(Integer id);

    Integer updateUnionIdAndOpenIdIsNull(User user);

    /**
     * unionId
     *
     * @param unionId
     * @return
     */
    Integer getUserByUnionIdCheck(@Param("unionId") String unionId);

    User getOfficialAccountOpenId(Integer userId);

    User getUserByOpenId(@Param("openId") String openId, @Param("status") Integer status);

    List<User> getAllUserSubAccountOfName(@Param("userInfo") UserInfo userInfo,@Param("userIdType") String userIdType);

    Integer updateAppletAccountOpenId(UserDto userDto);

    List<User> findOfficialOrAppletAccountOpenIdByUserId(Integer userId);


    List<UserVo> findUserByMerchantStoreId(UserDto userDto);

    UserVo finOneUserAndRoleUserByUserId(UserDto userDto);

    Integer updateName(UserDto userDto);

    List<User> findSubAccountV2(User user);

    /**
     * 测试用
     * */
    List<UserVo> findAllSubAccountList();

    Integer getWelfareReturnCoinSum(Integer userId);
}
